//
//  HomeTableViewController.swift
//  WeiBoItem
//
//  Created by jss on 16/4/16.
//  Copyright © 2016年 jss. All rights reserved.
//

import UIKit

class HomeTableViewController: JSSVisionTableController {

    
//    //定义一个属性判断是否登录
//    var Login:Bool = false
    
    
    //用户没有登录的时候  显示访客视图  (要在view还没加载出来的时候跟换访客页面)
    //用户已经登录,显示正常的tableView
//    
//    override func loadView() {
//        
//        if  Login {
//            //正常加载
//            super.loadView()
//            
//        }else{
//            
//            // //用户没有登录的时候  显示访客视图  (要在view还没加载出来的时候跟换访客页面)这个时候view还没加载出来 所以在这里实例化访客view
//            let v = UIView()
//            
//            v.backgroundColor = UIColor.orangeColor()
//            
//            self.view = v
//        }
//        
//    }
    
    let JSSIndentifier = "cell"
    
    //定义一个数组  只能放JSSStatusModel类型的数组
//    var statusArray:[JSSStatusModel]?
    
    
    //当前控制器对应的VIewModel
    private lazy var statusListViewModel:JSSStatusListViewModel = JSSStatusListViewModel()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        
        if Login == false {
            
            vissionView.setVissionInfo(nil, imageName: nil)
            
            return
        }
        
        //设置UI
        setupUI()
        
        //加载数据
        loadDate()
        
        
        
    }
    
    private func setupUI() {
        
        //注册cell
        tableView.registerClass(JSSStatusTableViewCell.self, forCellReuseIdentifier: JSSIndentifier)
        
        //设置背景颜色
        tableView.backgroundColor =  UIColor(white: 237/255.0, alpha: 1)
        
        //  self.tableView.rowHeight = 200
        
        //设置预估行高
        tableView.rowHeight = UITableViewAutomaticDimension
        
        tableView.estimatedRowHeight = 200
        
        tableView.separatorStyle = .None
        
        //设置tableview的组尾就是自己设置的那个控件
        tableView.tableFooterView = pullView
        
        
          //-----系统的下拉刷新控件-------
//        //初始化下拉刷新控件
//        self.refreshControl = UIRefreshControl()
//        //给下拉控件添加监听事件
//        self.refreshControl?.addTarget(self, action: "loadDate", forControlEvents: UIControlEvents.ValueChanged)
//        
        
        //------自定义下拉刷新控件------
        
        //将自定义的控件添加到tableView上
        self.tableView.addSubview(refreshView)
        //给控件添加监听方法
        refreshView.addTarget(self, action: "loadDate", forControlEvents: .ValueChanged)
        
        
        

        //把下拉刷新提示lable添加到导航控制器的view上
        self.navigationController?.view.addSubview(pullUpTipLable)
        //要把这个pullUpTip放到navigationbar(导航栏)下面
        self.navigationController?.view.insertSubview(pullUpTipLable, belowSubview: self.navigationController!.navigationBar)
        
       
        
       
        
    }
    
  
   @objc private func loadDate() {
        
                                     //菊花转表示 是加载更多
        statusListViewModel.loadDate(pullView.isAnimating()) { (isSuccess,count) -> () in
//              statusListViewModel.loadDate { (isSuccess) -> () in
        
            if isSuccess {
                //刷新数据
                self.tableView.reloadData()
                
            }else{
                
                print("请求数据失败")
            }
   
            //判断如果是下拉刷新的话(等刷新完的动画停止后)再显示pullUpTip  lable
            if self.pullView.isAnimating() == false {
                
                //执行提示lable的动画
                self.showPullUpTipLable(count)
            }
            
            //当数据请求成功后 停止
             //self.refreshControl?.endRefreshing()
            //结束刷新(这个方法在自定义的refreshView)
            
            self.refreshView.endRefrensh()

            
        }
    }
    
    
    //显示pulluptiplable的动画
    func showPullUpTipLable(count:Int) {
    
        //判断是否在显示
        if pullUpTipLable.hidden == false {
            
            return
        }
        //设置初始位置
        pullUpTipLable.frame.origin.y = CGRectGetMaxY(self.navigationController!.navigationBar.frame) - self.pullUpTipLable.frame.height
        //让lable显示
        self.pullUpTipLable.hidden = false
        
        //根据count判断 显示的文字内容
        let text = count > 0 ? "\(count)条新微薄" : "没有新微博数据"
        
        pullUpTipLable.text = text
        
        //执行显示动画
        UIView.animateWithDuration(1, animations: { () -> Void in
            
            self.pullUpTipLable.transform = CGAffineTransformMakeTranslation(0, 35)
            
            }) { (_) -> Void in
          
                UIView.animateWithDuration(1, animations: { () -> Void in
                    
                    self.pullUpTipLable.transform = CGAffineTransformIdentity
                    
                    }, completion: { (_) -> Void in
                        
                        //隐藏PullUpTipLable
                        self.pullUpTipLable.hidden = true
                })
                
        }
    
    
    }
    
    //懒加载自定义下拉刷新控件
    private lazy var refreshView:JSSRefreshView = JSSRefreshView()
    
    
    
    //懒加载控件
    private lazy var pullView: UIActivityIndicatorView = {
    
    let activityIndicator = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.WhiteLarge)
        
        //设置颜色
        
        activityIndicator.color = UIColor.redColor()
        
        //默认菊花是停止的 停止就是隐藏的  这里让菊花显示 以便能够看到是否设置
        //activityIndicator.hidden = false
        
        return activityIndicator
    
    }()
    
    //懒加载下拉刷新提示lable
    private lazy var pullUpTipLable:UILabel = {
    
        let lable = UILabel(textColor: UIColor.whiteColor(), textFont: JSSStatusContentFont)
        
        lable.backgroundColor = UIColor.redColor()
        
        lable.frame.size = CGSize(width: SCREENW, height: 35)
        
        lable.text = "最近加载的数据"
        
        lable.textAlignment = .Center
        
        lable.hidden = true
        
        return lable
    
    }()

    
}



//实现tabView代理方法的分类
extension HomeTableViewController {
    
    
    //将要加载某个cell的时候 就会去调用这个方法
    override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
        
        //判断是否是将要加载最后一个
        if indexPath.row == statusListViewModel.statusArray!.count - 1 && !pullView.isAnimating() {
            
            print("将要加载最后一个cell")
            
            //菊花转
            pullView.startAnimating()
            
            //加载数据
            loadDate()
            
            //加载完数据以后 菊花停止转
            pullView.stopAnimating()
            
        }
        
    }
    
    
    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        
//        return (self.statusArray?.count) ?? 0
        return statusListViewModel.statusArray?.count ?? 0
        
    }
    
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        
        // 用这个方法：系统会去缓存中取，如果没有取到，就帮我们创建一个并返回。但是前提就是我们必须注册
        let cell = tableView.dequeueReusableCellWithIdentifier(JSSIndentifier, forIndexPath: indexPath) as! JSSStatusTableViewCell
        
        //cell.textLabel?.text = statusArray![indexPath.row].text
//        cell.textLabel?.text = statusListViewModel.statusArray![indexPath.row].text
        
        cell.statusViewMdoel = statusListViewModel.statusArray![indexPath.row]
        
        return cell
        
    }
    
    
}
